package cn.tedu.egmybatis2.mapper;


import cn.tedu.egmybatis2.polo.entity.Weibo;
import cn.tedu.egmybatis2.vo.*;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface WeiboMapper {
    /**
     * 1.增:微博表中插入1条数据
     * 增删改操作:返回值为int
     * 注意: #{}是占位符, #{属性名}是获取实体类属性值
     */
    //@Insert("INSERT INTO weibo(content,created,user_id) VALUES (#{content},#{created},#{userId})")
    int insertWeibo(Weibo weibo);

    /**
     * 2.删:微博表中删除1条数据[根据微博id];
     */
    //@Delete("DELETE FROM weibo WHERE id=#{wid}")
    int deleteWeiboById(Long wid);

    /**
     * 3.改:微博表中修改1条数据[根据微博id];
     *   UPDATE weibo SET content=#{},created=#{},user_id=#{}
     *   WHERE id=#{id}
     */
    //@Update("UPDATE weibo SET content=#{content}, created=#{created}, user_id=#{userId} WHERE id=#{id}")
    int updateWeiboById(Weibo weibo);

    /**
     * 4.查:单条数据全字段查询;
     *   根据微博ID查询该条微博的全字段信息;
     *   SELECT id,content,created,user_id FROM weibo WHERE id=#{wid}
     *   查询字段名和属性名不一致,则使用别名的方式解决;
     */
    //@Select("SELECT id,content,created,user_id userId FROM weibo WHERE id=#{wid}")
    Weibo selectWeiboById(Long wid);

    /**
     * 5.查:多条数据全字段查询;
     *   查询指定用户发的所有微博信息;
     *   查询结果可能包含多条数据时,要使用List集合接收,
     *   否则抛出异常:TooManyResultsException
     */
    //@Select("SELECT id,content,created,user_id userId FROM weibo WHERE user_id=#{uid}")
    List<Weibo> selectWeiboByUserId(Long uid);

    /**
     * 6.查询:单条数据部分字段查询;
     *   查询指定微博的内容和发布时间;
     */
    //@Select("SELECT content, created FROM weibo WHERE id=#{wid}")
    WeiboVO1 selectWeiboVO1ById(Long wid);

    /**
     * 7.查询:多条数据部分字段查询;
     *   查询所有微博的内容和用户id;
     */
    //@Select("SELECT content, user_id userId FROM weibo")
    List<WeiboVO2> selectWeiboVO2();

    /**
     * 8.动态修改:根据微博id动态修改该条微博的信息;
     */
    int dynamicUpdate(Weibo weibo);

    /**
     * 9.动态删除:数组方式删除多条微博;
     *   DELETE FROM weibo WHERE id IN (数组)
     */
    int deleteWeiboByIds1(Long[] ids);

    /**
     * 10.动态删除:集合方式删除多条微博;
     */
    int deleteWeiboByIds2(List<Long> ids);

    /**
     * 11.统计数量:查询微博表中微博数量;
     *    SELECT COUNT(*) FROM weibo;
     */
    int countWeibo();

    /**
     * 12.ResultMap单表
     *    根据微博ID查询该条微博的 id content user_id
     */
    ResultMapVO1 selectMap1(Long wid);
    /**
     * 13.ResultMap多表
     *    查询指定用户发的信息，显示用户ID，用户名，微博的集合
     */
    ResultMapVO2 selectMap2(Long uid);
    /**
     * 14.查询制定所有内容的评论信息
     * 微博ID，微博内容，所有评论集合
     */
    ResultMapVO3 selectMap3(Long wid);

    ResultMapVO4 selectMap4(Long wid);
}







